import { IPSModelObject } from '../ipsmodel-object';
import { IPSLanguageRes } from '../res/ipslanguage-res';
import { IPSWFLinkGroupCond } from './ipswflink-group-cond';
import { IPSWFProcess } from './ipswfprocess';

/**
 *
 * 子接口类型识别属性[wFLinkType]
 * @export
 * @interface IPSWFLink
 */
export interface IPSWFLink extends IPSModelObject {
  /**
   * 自定义条件
   * @type {string}
   */
  customCond: string;

  /**
   * 源流程处理
   *
   * @type {IPSWFProcess}
   */
  getFromPSWFProcess(): IPSWFProcess | null;

  /**
   * 源流程处理
   *
   * @type {IPSWFProcess}
   */
  get fromPSWFProcess(): IPSWFProcess | null;

  /**
   * 源流程处理（必须存在）
   *
   * @type {IPSWFProcess}
   */
  getFromPSWFProcessMust(): IPSWFProcess;

  /**
   * 逻辑名称语言资源
   *
   * @type {IPSLanguageRes}
   */
  getLNPSLanguageRes(): IPSLanguageRes | null;

  /**
   * 逻辑名称语言资源
   *
   * @type {IPSLanguageRes}
   */
  get lNPSLanguageRes(): IPSLanguageRes | null;

  /**
   * 逻辑名称语言资源（必须存在）
   *
   * @type {IPSLanguageRes}
   */
  getLNPSLanguageResMust(): IPSLanguageRes;

  /**
   * 逻辑名称
   * @type {string}
   */
  logicName: string;

  /**
   * 连接条件
   *
   * @type {IPSWFLinkGroupCond}
   */
  getPSWFLinkGroupCond(): IPSWFLinkGroupCond | null;

  /**
   * 连接条件
   *
   * @type {IPSWFLinkGroupCond}
   */
  get psWFLinkGroupCond(): IPSWFLinkGroupCond | null;

  /**
   * 连接条件（必须存在）
   *
   * @type {IPSWFLinkGroupCond}
   */
  getPSWFLinkGroupCondMust(): IPSWFLinkGroupCond;

  /**
   * 目标流程处理
   *
   * @type {IPSWFProcess}
   */
  getToPSWFProcess(): IPSWFProcess | null;

  /**
   * 目标流程处理
   *
   * @type {IPSWFProcess}
   */
  get toPSWFProcess(): IPSWFProcess | null;

  /**
   * 目标流程处理（必须存在）
   *
   * @type {IPSWFProcess}
   */
  getToPSWFProcessMust(): IPSWFProcess;

  /**
   * 处理连接处理
   * @description 值模式 [流程连接类型] {TIMEOUT：超时连接、 IAACTION：交互连接、 ROUTE：常规连接、 WFRETURN：嵌入流程返回 }
   * @type {( string | 'TIMEOUT' | 'IAACTION' | 'ROUTE' | 'WFRETURN')}
   */
  wFLinkType: string | 'TIMEOUT' | 'IAACTION' | 'ROUTE' | 'WFRETURN';

  /**
   * 启用自定义条件
   * @type {boolean}
   * @default false
   */
  enableCustomCond: boolean;
}
